package br.com.menosehmais.framework.persistence;

import javax.persistence.PostPersist;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.servlet.http.HttpSession;

import org.joda.time.LocalDateTime;

import br.com.caelum.vraptor.core.RequestInfo;
import br.com.caelum.vraptor.http.MutableRequest;
import br.com.caelum.vraptor.ioc.spring.VRaptorRequestHolder;
import br.com.menosehmais.framework.loggin.StackTraceLogger;

/**
 * 
 * EntityListener que adiciona o usuário logado na sessão caso a entidade
 * implementar IComResponsável e o horário o DateTime caso a entidade implemente
 * IComUltimaAtualizacao.
 * 
 * Essa classe é registrar em casa DomainObject pela anotação @EntityListener
 * 
 * Esta classe só atua para entidades que implementem: IComResponsavel ou
 * IComUltimaAtualizacao
 * 
 * @author Seabra
 * @author Quintino
 *
 * @see http://www.objectdb.com/java/jpa/persistence/event
 */
public class EntityListener {

    @PreUpdate
    @PrePersist
    public void setFields(DomainObject obj) {

        if (obj instanceof IHaveLastUpdate) {
            IHaveLastUpdate iComUltimaAtualizacao = (IHaveLastUpdate) obj;
            iComUltimaAtualizacao.setLastUpdate(new LocalDateTime());
        }

        // FIXME fazer apenas no insert
        if (obj instanceof IHaveCreationDateTime) {
            IHaveCreationDateTime iHaveCreationDateTime = (IHaveCreationDateTime) obj;
            iHaveCreationDateTime.setCreationDateTime(new LocalDateTime());
        }
        
    }
    
}
